use std::fmt::Display;

// 直接使用 impl Display, 而不是指定 T: Display。这是impl特征语法
// 这为我们返回复杂或不方便的类型（例如函数的闭包）提供了便利
fn show_me(val: impl Display) {
    println!("{}", val);
}

// 通常建议将特征区间的impl特征语法用作函数的返回类型
// 在参数位置使用它意味着我们不能使用turbofish运算符
fn lazy_adder(a: u32, b: u32) -> impl Fn() -> u32 {
    move || a + b
}

fn main() {
    show_me("Trait bounds are awesome");

    let add_later = lazy_adder(1024, 2048);
    println!("{:?}", add_later())
}